Skip to content

feat(dc_measurements): add Mission Measurement NavigateThroughPoses adapter - #404

Merged
Minipada merged 3 commits into
jazzyfrom
feature/388-add-the-mission-measurement-navigatethro
Aug 20, 2026
Merged

feat(dc_measurements): add Mission Measurement NavigateThroughPoses adapter#404
Minipada merged 3 commits into
jazzyfrom
feature/388-add-the-mission-measurement-navigatethro

Conversation

@Minipada

Copy link
Copy Markdown
Owner

Summary

  • Adds a new dc_measurements plugin, mission_nav2_through_poses (class
    MissionNav2ThroughPoses), watching nav2's NavigateThroughPoses action and emitting
    mission_start/mission_end Records in Add the Mission Measurement: nav2 adapter (mission_start/mission_end Records) #387's Record schema, with
    mission_type: "navigate_through_poses".
  • The Measurement is a passive observer, not a second rclcpp_action::Client
    competing for the action server's single active goal: it subscribes to the action's
    own _action/status/_action/feedback topics and calls _action/get_result
    directly, rather than sending its own goal (which would preempt whatever real
    navigation client — BT navigator, fleet orchestrator — is actually driving the
    robot). All generated-message field names used were cross-checked against the real
    .msg/.action definitions in ros-navigation/navigation2 and
    ros2/rcl_interfaces/ros2/unique_identifier_msgs on GitHub.
  • ROS-free core (mission_nav2_through_poses_core.hpp) interprets goal-status/result
    into mission_start/mission_end facts, following Two ROS-free modules in dc_common: StateTransitionDetector and BatteryCycleAccumulator #360's
    StateTransitionDetector/BatteryCycleAccumulator split precedent.
  • New JSON Schema (mission_nav2_through_poses.json), doc page, and both a ROS-free
    core unit test and a MeasurementServer integration test using a real
    rclcpp_action::Server fixture standing in for nav2.

Closes #388

Test plan

  • git add -A && prek run --all-files --skip build-doc passes clean
  • colcon build --packages-select dc_measurements (no ROS 2 toolchain available in
    the sandbox this was written in — see progress.txt's Add the Mission Measurement: NavigateThroughPoses adapter #388 entry for what was
    verified without it)
  • colcon test --packages-select dc_measurements (new tests:
    dc_measurements_test_mission_nav2_through_poses_core,
    dc_measurements_test_measurement_mission_nav2_through_poses)

🤖 Generated with Claude Code

https://claude.ai/code/session_012q87RuoZxzfQEBotiaS88u

…dapter (#388)

Adds `mission_nav2_through_poses` (class MissionNav2ThroughPoses), a passive
rclcpp_action-topic observer emitting mission_start/mission_end Records for nav2's
NavigateThroughPoses action, in #387's Record schema with
mission_type: "navigate_through_poses". Watches the action's own
_action/status + _action/feedback topics and _action/get_result service rather than
sending a competing goal, so it never preempts the real navigation client.

Closes #388

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012q87RuoZxzfQEBotiaS88u
Signed-off-by: David Bensoussan <d.bensoussan@proton.me>
@Minipada
Minipada force-pushed the feature/388-add-the-mission-measurement-navigatethro branch from 9959947 to 2f63055 Compare August 20, 2026 11:24
…2_msgs

CI's real Jazzy build failed with a missing-header error for
nav2_msgs/msg/waypoint_status.hpp. The earlier field verification fetched
ros-navigation/navigation2 without pinning a ref, resolving to its default
(rolling) branch rather than the jazzy branch this repo's rosdep actually
installs -- on jazzy, NavigateThroughPoses::Result has no waypoint_statuses
field at all. Removed it from the core, plugin, schema, tests, and docs
rather than working around a field that doesn't exist on the nav2 this repo
targets; every other field (error_code/error_msg/number_of_recoveries,
action_msgs' status_list/goal_info/goal_id) was re-verified against the
jazzy branch directly and is unaffected.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012q87RuoZxzfQEBotiaS88u
Signed-off-by: David Bensoussan <d.bensoussan@proton.me>
@codecov

codecov Bot commented Aug 20, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 92.63804% with 12 lines in your changes missing coverage. Please review.
✅ Project coverage is 68.71%. Comparing base (8f8e89e) to head (6a1d785).

Files with missing lines Patch % Lines
...s/measurements/mission_nav2_through_poses_core.hpp 89.10% 6 Missing ⚠️
...lugins/measurements/mission_nav2_through_poses.cpp 94.45% 6 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##            jazzy     #404      +/-   ##
==========================================
+ Coverage   68.09%   68.71%   +0.62%     
==========================================
  Files         102      104       +2     
  Lines        6320     6483     +163     
==========================================
+ Hits         4303     4454     +151     
- Misses       2017     2029      +12     
Flag Coverage Δ
cpp-jazzy 68.71% <92.64%> (+0.62%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

… fixture

CI's colcon test failed all 7 test_measurement_mission_nav2_through_poses cases with
"goal_handle attempted invalid transition from state EXECUTING with event EXECUTE".
The fake action-server fixture's handle_goal callback returns ACCEPT_AND_EXECUTE, which
rcl_action already uses to drive the goal handle from ACCEPTED to EXECUTING before
handle_accepted runs; calling execute() again there was a second EXECUTE event on an
already-EXECUTING goal handle, which rcl_action treats as a hard error rather than a
no-op. The plugin under test was never at fault.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012q87RuoZxzfQEBotiaS88u
Signed-off-by: David Bensoussan <d.bensoussan@proton.me>
@Minipada
Minipada merged commit 4cc75bb into jazzy Aug 20, 2026
10 checks passed
@github-actions
github-actions Bot deleted the feature/388-add-the-mission-measurement-navigatethro branch August 20, 2026 12:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant